package com.naizhuai.network.apistore;

import com.naizhuai.Model.db.eneity.ManageNoteBean;
import com.naizhuai.network.Config;
import com.naizhuai.network.entity.ResultResponse;
import com.naizhuai.ui.entity.management.CompanyBean;
import com.naizhuai.ui.entity.management.ManagementMainMsgBean;
import com.naizhuai.ui.entity.management.RequestJoinMessageBean;
import com.naizhuai.ui.entity.management.DepartmentBean;

import java.util.List;

import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Created by code_han on 2018/1/25.
 * 公司架构管理类的网络接口调用
 */
public interface CompanyManageRequest {

    /*
    查
     */
    //根据公司id、个人id获取个人所在的团队列表信息
    @GET(Config.REQUEST_PER_TEAMS_BY_ID)
    Observable<ResultResponse<List<DepartmentBean>>> getTeamListByPerIds(@Query("companyId") String companyId);


    //根据团队的id以及所在公司的id请求所在团队的详细数据
    @GET(Config.REQUEST_TEAM_BY_ID)
    Observable<ResultResponse<DepartmentBean>> getTeamDetailsByIds(@Query("companyId") String companyId, @Query("departmentId") String teamId);


    //根据公司id获取公司的团队列表信息
    @GET(Config.REQUEST_TEAMS_LIST_BY_ID)
    Observable<ResultResponse<List<DepartmentBean>>> getTeamListInCompanyByIds(@Query("companyId") String companyId);

    //根据公司id获取管理界面的首页信息
    @GET(Config.REQUEST_COMPANY_MAIN_PAGER_BY_ID)
    Observable<ResultResponse<ManagementMainMsgBean>> getCompanyMainMsgByIds(@Query("companyId") String companyId);

    //根据公司的id请求公司的基本信息
    @GET(Config.REQUEST_COMPANY_DETAILS_BY_ID)
    Observable<ResultResponse<CompanyBean>> getCompanyDetailsByIds(@Query("companyId") String companyId);

    //根据公司的id请求公司成员的列表信息
    @GET(Config.REQUEST_COMPANY_MEMBERS_BY_ID)
    Observable<ResultResponse<CompanyBean>> getCompanyMembersByIds(@Query("companyId") String companyId);

    //根据公司的id请求公司成员的列表信息
    @GET(Config.REQUEST_STATES)
    Observable<ResultResponse<List<ManageNoteBean>>> getApplyStatus(@Query("applyIdList") String applyIdList);


    /*
    删除
     */
    //根据公司id与团队id删除某个团队（开除/离职等等，在操作的时候需要判断操作人的权限）
    @FormUrlEncoded
    @POST(Config.DELETE_TEAM_BY_IDS)
    Observable<ResultResponse<String>> deleteTeamFromCompanyByIds(@Field("departmentId") String teamId);


    //根据被删除人的公司id，团队id以及个人id删除在公司的某人（开除/离职等等，在操作的时候需要判断操作人的权限）
    @FormUrlEncoded
    @POST(Config.DELETE_PERSON_FROM_COMPANY_BY_IDS)
    Observable<ResultResponse<String>> deletePersonFromCompanyByIds(@Field("departmentId") String departmentId, @Field("groupId") String teamId, @Field("removeUsers") String removeUsersId, @Field("removeType") int removeType, @Field("isInitiative") int isInitiative);


    /*
    修改
     */
    //将某人设为某个组的组长或者管理员（在操作的时候需要判断操作人的权限）U
    @FormUrlEncoded
    @POST(Config.UPDATE_PERSON_FROM_TEAM_BY_IDS)
    Observable<ResultResponse<DepartmentBean>> updatePersonPositionInTeamByIds(@Field("companyId") String companyId, @Field("teamId") String teamId, @Field("UpUid") String managePerId, @Field("status") String status);

    //修改公司信息
    @FormUrlEncoded
    @POST(Config.UPDATE_COMPANY_MESSAGE)
    Observable<ResultResponse<CompanyBean>> updateCompanyMsg(@Body CompanyBean company);

    //修改团队信息
    @FormUrlEncoded
    @POST(Config.UPDATE_TEAM_MESSAGE)
    Observable<ResultResponse<String>> updateTeamMsg(@Field("departmentId") String departmentId, @Field("name") String departmentName);

    //修改团队中的个人信息
    @FormUrlEncoded
    @POST(Config.UPDATE_USER_DEPARTMENT_INFO)
    Observable<ResultResponse<String>> updateUserInfo(@Field("changedUid") String changedUid, @Field("departmentId") String departmentId, @Field("power") String power);

    //修改公司中的个人信息
    @FormUrlEncoded
    @POST(Config.UPDATE_USER_COMPANY_INFO)
    Observable<ResultResponse<String>> updateUserInfoFromCompany(@Field("changedUid") String changedUid, @Field("power") String power);


    /*
    添加
     */
    //申请加入公司/团队
    @FormUrlEncoded
    @POST(Config.REQUEST_TO_JOIN_COMPANY)
    Observable<ResultResponse<String>> requestToJoinCompany(@Field("applyCompanyId") String applyCompanyId, @Field("applyDepartmentId") String departmentId, @Field("content") String content);

    //邀请某人加入公司/团队（在操作的时候需要判断操作人的权限，最高权限不需要申请）
    @FormUrlEncoded
    @POST(Config.INVITE_PERSON_TO_COMPANY_OR_TEAM)
    Observable<ResultResponse<String>> insertPersonAddCompanyByIds(@Field("inviteUsers") String inviteUserIds, @Field("groupType") int groupType, @Field("departmentId") String departmentId, @Field("power") String power, @Field("groupId") String groupId);

    //创建团队
    @FormUrlEncoded
    @POST(Config.CREATE_TEAM)
    Observable<ResultResponse<String>> createTeam(@Field("name") String groupName, @Field("leadingUid") String leadingUid, @Field("inviteUsers") String inviteUsersIds);

     /*
    管理申请审批类别
     */

    /**
     * 获取公司申请列表
     *
     * @param companyId 申请的公司id
     * @param offset    查询数量起始值
     * @param limit     查询申请的数量
     * @return
     */
    @GET(Config.SEARCH_REQUEST_LIST)
    Observable<ResultResponse<List<RequestJoinMessageBean>>> getRequestMessageList(@Query("companyId") String companyId, @Query("offset") int offset, @Query("limit") int limit);


    @GET(Config.SEARCH_ALL_COMPANY_LIST)
    Observable<ResultResponse<List<CompanyBean>>> getCompanyMessageList(@Query("offset") int offset, @Query("limit") int limit);

    @FormUrlEncoded
    @POST(Config.HANDLE_APPLY)
    Observable<ResultResponse<String>> handleApply(@Field("applyRes") String applyRes, @Field("applyIdList") String applyIdList);
}
